"""
问题记录：
前端表单数据验证
###csrf后端验证

支付系统 对称加密或非对称加密：
<red>牛逼·</>
前端带参数请求商城 商城返回支付接口的链接 支付接口验证支付  向商城发送数据 完成支付

"""
import base64
from Crypto.Cipher import AES
 
AES_KEY = 'aw123zsc212s9ju0'  # It must be 16, 24 or 32 bytes long (respectively for *AES-128*, *AES-192* or *AES-256*).
 
 
def add_to_16(text: str) -> bytes:
    """
    不足16位的地方补全位数
    :param text: 源字符串
    :return: 补足字符串
    """
    b_text = text.encode('utf-8')
    # 计算需要补的为位数
    if len(text) % 16:
        add = 16 - (len(b_text) % 16)
    else:
        add = 0
    return b_text + (b'\0' * add)
 
 
def encrypt_by_aes(text: str, key: str) -> str:
    """
    加密函数
    :param text: 源字符串
    :param key: 密钥
    :return: 加密字符串
    """
    key = key.encode('utf-8')
    text = add_to_16(text)  # 如果长度不够补足 16 位
    cryptos = AES.new(key, AES.MODE_ECB)  # 使用ECB模式
    cipher_text = cryptos.encrypt(text)  # 加密
    return base64.standard_b64encode(cipher_text).decode('utf-8')  # 将加密结果转为base64编码输出
 
 
def decrypt_by_aes(text: str, key: str):
    """
    解密函数
    :param text: 加密字符串
    :param key: 密钥
    :return: 解密结果
    """
    key = key.encode('utf-8')
    text = text.encode('utf-8')
    text = base64.b64decode(text)  # 先使用base64解码
    cryptos = AES.new(key, AES.MODE_ECB)
    cipher_text = cryptos.decrypt(text)  # 解密
    return cipher_text.decode('utf-8').strip('\0')
 
 

source_str = 'hello,你好'
encrypt_str = encrypt_by_aes(source_str, AES_KEY)
decrypt_str = decrypt_by_aes(encrypt_str, AES_KEY)
print(encrypt_str)
print(decrypt_str)